Storage as a transformation of signals in time can be modelled as a bandlimited channel, and for digital signal readout in particular, a bit clock is commonly regenerated from the read out signal. Both facts are reasons that Run-Length Limited or RLL channel codes are used on digital storage media. Also known as (d,k) codes, they convert any sequence of arbitrary payload bits into a longer sequence of channel bits that has at least d and at most k “0”s between consecutive “1”s. In a subsequent transcoding stage, historically also known as “preceding”, the sequence containing the thus isolated “1”s is converted to an output signal where each of the “1”s in the sequence causes a state change in the output signal. In optical storage, such state changes are from “pit” to “space” or vice versa, and in magnetic recording, they are from a “plus” to a “minus” magnetic orientation, or vice versa. This transcoding is known as NRZI coding; for reasons of mathematical tractability, it is sometimes conceptually followed by a mapping of the amplitudes of the output signal to output values wε{−1,+1}. Regardless of the physical basis of recording, the limitations on the distance of the “1”s in the sequence translate into the physically homogeneous regions between state changes on a storage track being of a length that is upper and lower limited.
FIG. 3 shows a block diagram of a prior art RLL-encoder having a dk-encoder 301 and a precoder 302. The dk-encoder 301 maps data tuples u consisting of a predefined number of unconstrained binary elements from {“0”,“1”} to constrained tuples v of binary elements. Because of the constraints that v must obey, the number of binary elements in v, i.e. the length of the dk-encoded bitstream, must be bigger than the number of elements in u, i.e. the length of the payload. In this, “unconstrained” means that any combination of element values may occur; correspondingly, “constrained” refers to certain combinations of values being forbidden, as described herein. The sequence of constrained tuples v is characterized by a minimum runlength constraint d and a maximum runlength constraint k. The d-constraint requires at least d “zeros” between consecutive “ones”, the k-constraint requires at most k “zeros” between any two consecutive “ones”. Using the NRZI approach, the constrained tuples v are precoded in a precoder 302 into precoded tuples w which will be stored.
For various reasons connected to signal regeneration on the storage readout side, it is important that the output signal w being written onto the medium is “DC free”, with other words, that, at least on average, this signal contains as much of “pit” as of “space”, or as much of “plus” as of “minus” in the magnetic case. As a criterion to measure this desirable property, the Running Digital Sum or RDS is used. In the domain of the symmetrically valued output values wε{−1,+1}, the RDS corresponds to the time integral taken from some start time up to the current time. The RDS can as well be derived before the NRZI precoder, i.e. in the domain of the dk-encoded constrained tuples v. There it amounts to sequentially using the runs of “0”s between the isolated “1”s to alternatively count up and down in an up-down-counter. In addition to the RDS itself, its variation is also used as a criterion whether a code is DC-free. This variation is often designated as Digital Sum Variation or DSV and defined as DSV=max(RDS)−min(RDS)+1.
U.S. Pat. No. 5,151,699 describes a method for controlling the DC-content of a runlength-limited bitstream. Two different runlength-limited bitstreams, together called a “redundant data series”, are generated in parallel by periodically inserting into the data bit stream DC control bits that are either “00” or “11”. Because of the different control bits in the two parallel bitstreams, their respective Running Digital Sum (RDS) will also be different. The bitstream with the smaller RDS is chosen, the other one is discarded. A notion of “Digital Sum Value” or “DSV” is used in that disclosure to refer to what has been explained as RDS above. Although the method is generic and can be applied to a wide field of modulation codes, it is especially suited for RLL codes featuring the so-called “parity preserving” constraint, like the so-called “17 pp code”. This constraint means that during the step of dk-encoding, the parity of the output tuple v must be equal to the parity of the input tuple u, for all pairs of u and v in the table describing the dk-encoder. It is easy to see that with parity preservation, inserting a control bit “1” into one of the bitstreams and inserting a control bit “0” into the other, will likely result in substantially different RDSs. However, in this method, because of the look ahead nature of the dk-encoder, the two parallel bitstreams are also very likely to have two different assignments (groupings) of data to codewords. This influences the RDS in each branch in an unsystematic and uncontrolled way, thus making DC-suppression less effective. The method of U.S. Pat. No. 5,151,699 can also be seen as having the disadvantage that of the two bitstream branches prepared, one will always be abandoned unused.